/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package librairies;

import exception.VariableNonDeclareeException;
import generation.GestionVariables;
import java.util.HashMap;
import java.util.Map;
import javax.swing.table.AbstractTableModel;

/**
 * Classe qui étends la classe AbstractTableModel. Elle permet de fournir
 * une implémentation personnalisée d'un TableModel pour la jTable
 * Dans le cas présent on implémente un model permettant d'afficher et de mettre à jour
 * une jTable contenant le nom des variables et leur valeur.
 * @author FM & KB
 */
public class ModelJTableVariable extends AbstractTableModel {

    //Variable d'instance
    Map<String, Integer> donnees;
    String titres[] = {"Variable", "Valeur"};

    /**
     * Constructeur
     * @param donnees les données à affecter au modèle
     */
    public ModelJTableVariable(Map<String, Integer> donnees) {
        this.donnees = donnees;
    }

    public ModelJTableVariable() {
        donnees = new HashMap<String, Integer>();
    }

    public int getColumnCount() {
        return titres.length;
    }

    public Object getValueAt(int row, int col) {
        /*Si c'est le première ligne on retourne les titre des colonnes
        if (row == 0){
        if (col == 0)
        return titres[0];
        else if (col == 1)
        return titres[1];
        }*/
        //Sinon on affiche le contenu de la mémoire (variable et valeur)
        int cpt = 0;
        for (String nomVariable : donnees.keySet()) {
            //on laisse la première ligne au titre "Variable" | "Valeur"
            if (cpt == row) {
                if (col == 0) {
                    return nomVariable;
                } else if (col == 1) {
                    try {
                       return GestionVariables.getVariable("main",nomVariable).getValeur();
                    } catch (VariableNonDeclareeException fnde) {
                        System.err.println("Probleme lors de la construction des déclarations.");
                    }
                }
            }
            cpt++;
        }
        return null;
    }

    public int getRowCount() {
        //On ajoute 1 pour afficher les titres des colonnes sur la première ligne
        return donnees.size();
    }

    @Override
    public String getColumnName(int col) {
        if (col != 0 && col != 1) {
            return null;
        }
        return titres[col];
    }

    /**
     * Méthode remplir qui permet de modifier le contenu des données du modèle
     * @param tab le tableau qui va remplir les données
     */
    public void remplir(Map<String, Integer> tab) {
        this.donnees = tab;
        fireTableDataChanged();
    }
}
